﻿using System;

// 抽象类 UserTest，包含三个抽象方法
public abstract class UserTest
{
    // 抽象方法 M1（无参数，无返回值）
    public abstract void M1();
    
    // 抽象方法 M2（带字符串参数，返回整数）
    public abstract int M2(string input);
    
    // 抽象方法 M3（带两个整数参数，返回布尔值）
    public abstract bool M3(int a, int b);
}

// 子类 UserTestImpl，继承并实现抽象类 UserTest
public class UserTestImpl : UserTest
{
    // 重写抽象方法 M1
    public override void M1()
    {
        Console.WriteLine("执行 M1 方法：这是一个无参数无返回值的方法");
    }
    
    // 重写抽象方法 M2
    // 功能：返回输入字符串的长度（示例实现）
    public override int M2(string input)
    {
        if (input == null)
            return 0;
        Console.WriteLine($"执行 M2 方法：输入字符串为 '{input}'");
        return input.Length;
    }
    
    // 重写抽象方法 M3
    // 功能：判断第一个参数是否大于第二个参数（示例实现）
    public override bool M3(int a, int b)
    {
        Console.WriteLine($"执行 M3 方法：比较 {a} 和 {b}");
        return a > b;
    }
}

// 测试类
class Demo1
{
    static void Text(string[] args)
    {
        // 实例化子类（抽象类不能直接实例化）
        UserTest userTest = new UserTestImpl();
        
        // 调用重写后的方法
        userTest.M1();
        
        int resultM2 = userTest.M2("Hello World");
        Console.WriteLine($"M2 方法返回值：{resultM2}");
        
        bool resultM3 = userTest.M3(10, 5);
        Console.WriteLine($"M3 方法返回值：{resultM3}");
    }
}